#pragma once

#include "MemInfo.h"

/**
 * @brief The MemMonitor class          内存监控, 检测内存使用状态以及内存回收操作
 */
class MemMonitor
{
public:
    MemMonitor();
    ~MemMonitor();
    // 启动线程
    void startThread();

private:
    MemMonitor(const MemMonitor &m) = delete;
    MemMonitor &operator=(MemMonitor *m) = delete;

    // 内存回收线程
    static void threadMemoryRecover();
    // 内存检测线程
    static void threadMemoryDetect();

    // 内存使用是否达到警戒
    static bool isMemUseWarning();

    // shell回收内存
    static int recycleMem();

private:
    static float m_warnProportion;        // 警戒比例
    static std::mutex m_mutex;           // 互斥锁
    static std::condition_variable m_conditionVb;   // 条件变量
};
